package com.topscore.marketing.promotion.site.activity.coupon.data;

import lombok.Data;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 促销活动卡券。
 * @author dengb
 */
@Data
@Entity
public class Coupon {

    @Id
    private Long id;

    /**
     * 卡券模板，用于生成促销卡券。
     * @author dengb
     */
    @Data
    @Entity(name = "coupon_template")
    public static class Template {
        @Id
        private Long id;

        /**
         * 卡券名称。
         */
        private String name;

        /**
         * 卡券描述。
         */
        private String description;

        /**
         * 卡券有效起始时间。
         */
        private LocalDateTime startTime;

        /**
         * 卡券过期时间。
         */
        private LocalDateTime endTime;

        /**
         * 卡券总数（生成卡券的数量）。
         */
        private Integer quantity;

        /**
         * 卡券面额。
         */
        private Double par;
    }

    /**
     * 优惠券的使用规则。
     *
     * @author dengb
     */
    @Data
    @Entity(name = "coupon_rule")
    public static class Rule {
        /**
         * 主键，UUID。
         */
        @Id
        @Column(length = 36)
        private String couponId;

        /**
         * 券使用规则。
         */
        @Enumerated
        private Coupon.RoleType role;

        @Transient
        @OneToMany(mappedBy = "rule")
        private List<Coupon> coupons;
    }

    /**
     * 优惠券类型。
     *
     * @author dengb
     */
    public enum RoleType {
        ONE,
        TWO,
        THREE,
        FOUR
    }
}
